Mise à jour le 03/01/2022
Qui est le premier, l'oeuf ou la poule ?

Qui est le premier, l'oeuf ou la poule ?


Considérons deux classes, Hen et Egg avec ces deux règles :
* Lorsqu'une poule pond, elle crée un oeuf.
* Lorsqu'un oeuf éclot, une poule nait.

<?php
class Hen
{
    public function lay()
    {
        return new Egg();
    }
}

class Egg
{
    public function hatch()
    {
        return new Hen();
    }
}


On peut donc créer des petits enfants très simplement :

$hen = (new Hen())->lay()->hatch();


Ce design pattern est à ranger dans la catégorie des Constructors (ce n'est qu'un double FactoryMethod).